﻿<?php
class DAO
{
	function insert($instanceDB, $obj)
	{
		$utils = new DAOBeanUtils();
		
		$commandSQL = "INSERT INTO ". $obj->getNomeTabela() ." (". $utils->listaAtributos($obj) .") ";
		$commandSQL .= "VALUES (".$utils->listaValoresAtributos($obj).")";
		
		$resultado = $this->executa($instanceDB,$commandSQL);
		
		if($resultado == 1)
		{
			$resultado = "Cadastro efetuado com sucesso!!!";
		}else{
			$resultado = "Ocorreu algum erro na operação";
		}
		
		return $resultado;
	}
	
	
	function update($instanceDB, $obj)
	{
		$utils = new DAOBeanUtils();
		
		$commandSQL = "UPDATE ". $obj->getNomeTabela() ." set ". $utils->listaUpdates($obj)." WHERE codigo = " .$obj->getValor(0);
		
		$resultado = $this->executa($instanceDB,$commandSQL);
		
		if($resultado == 1)
		{
			$resultado = "Alteração efetuada com sucesso!!!";
		}else{
			$resultado = "Ocorreu algum erro na operação";
		}
		
		return $resultado;
	}
	
	function updateDouble($instanceDB, $obj)
	{
		$utils = new DAOBeanUtils();
		
		$commandSQL = "UPDATE ". $obj->getNomeTabela() ." set ". $utils->listaUpdates($obj)." WHERE ".$obj->getNome(0)." = " .$obj->getValor(0)." AND ".$obj->getNome(1)." = ".$obj->getValor(1);
		
		$resultado = $this->executa($instanceDB,$commandSQL);
		
		if($resultado == 1)
		{
			$resultado = "Alteração efetuada com sucesso!!!";
		}else{
			$resultado = "Ocorreu algum erro na operação";
		}
		
		return $resultado;
	}
	
	function get($instanceDB, $obj)
	{
		$utils = new DAOBeanUtils();
		$commandSQL = "SELECT ".$utils->getListaAtributos($obj)." FROM ". $obj->getNomeTabela() ." WHERE codigo = ".$obj->getValor(0);
		
		$resultado = $this->executaLista($instanceDB,$commandSQL);
		
		return $resultado;
	}
	
	function del($instanceDB, $obj)
	{
		$commandSQL = "DELETE FROM ". $obj->getNomeTabela() ." WHERE codigo = ".$obj->getValor(0);
		
		$resultado = $this->executa($instanceDB,$commandSQL);
		
		if($resultado == 1)
		{
			$resultado = "Excluído com sucesso!!!";
		}else{
			$resultado = "Ocorreu algum erro na operação";
		}
		
		return $resultado;
	}
	
	function getMax($instanceDB, $obj)
	{
		$commandSQL = "SELECT MAX(".$obj->getNome(0).") AS codigo FROM ".$obj->getNomeTabela();
		
		$resultado = $this->executaLista($instanceDB,$commandSQL);
		
		return $resultado;
	}
	
	function relacionate($instanceDB, $obj)
	{
		$qtd = $this->score($instanceDB, $obj);
		
		if($qtd["total"] == 0)
		{
			return $this->insert($instanceDB, $obj);
		}
	}
	
	function score($instanceDB, $obj)
	{
		$commandSQL = "SELECT COUNT(*) AS total FROM ".$obj->getNomeTabela()." WHERE ".$obj->getNome(0)." = ".$obj->getValor(0)." AND ".$obj->getNome(1)." = '".$obj->getValor(1)."'";
		$resultado = $this->executaLista($instanceDB,$commandSQL);
		return $resultado;
	}
	
	function contar($instanceDB, $obj)
	{
		$commandSQL = "SELECT COUNT(*) AS total FROM ".$obj->getNomeTabela()." WHERE ".$obj->getNome(0)." = ".$obj->getValor(0);
		$resultado = $this->executaLista($instanceDB,$commandSQL);
		return $resultado;
	}
	
	
	function executa($instanceDB,$commandSQL)
	{
		return executaSql($instanceDB,$commandSQL);
	}
	
	function executaLista($instanceDB,$commandSQL)
	{
		return mysql_fetch_array(executaSql($instanceDB,$commandSQL));
	}
}


class DAOBeanUtils
{
	function listaAtributos($obj)
	{
		$lista = "";
		
		for($i = 0; $i < ($obj->getQtdAtributos()); $i++)
		{
			if($obj->getNome($i) != "codigo")
			{
				if($i == ($obj->getQtdAtributos()-1))
				{
					$lista .= $obj->getNome($i);
				}else{
					$lista .= $obj->getNome($i).", ";
				}
			}
		}
		
		return $lista;
	}
	
	function listaValoresAtributos($obj)
	{
		$lista = "";
		for($i = 0; $i < ($obj->getQtdAtributos()); $i++)
		{
			
			if($obj->getNome($i) != "codigo")
			{
				if($i == ($obj->getQtdAtributos()-1))
				{
					if($obj->getTipo($i) != "dateTime"){
						$lista .= "'".$obj->getValor($i)."'";
					}else{
						$lista .= "NOW()";
					}
				}else{
					if($obj->getTipo($i) != "dateTime"){
						$lista .= "'".$obj->getValor($i)."', ";
					}else{
						$lista .= "NOW(), ";
					}
				}
			}
		}
		
		return $lista;
	}
	
	
	function getListaAtributos($obj)
	{
		$lista = "";
		for($i = 0; $i < ($obj->getQtdAtributos()); $i++)
		{
			if($i == ($obj->getQtdAtributos()-1))
			{
				if($obj->getTipo($i) != "dateTime"){
					$lista .= $obj->getNome($i);
				}else{
					$lista .= "DATE_FORMAT(".$obj->getNome($i).",'%d/%m/%Y') AS ".$obj->getNome($i)." ";
				}
			}else{
				if($obj->getTipo($i) != "dateTime"){
					$lista .= $obj->getNome($i).", ";
				}else{
					$lista .= "DATE_FORMAT(".$obj->getNome($i).",'%d/%m/%Y') AS ".$obj->getNome($i).", ";
				}
			}
		}
		
		return $lista;
	}
	
	function listaUpdates($obj)
	{
		$listaUpdates = "";
		
		for($i = 0; $i < ($obj->getQtdAtributos()); $i++)
		{
			if($obj->getNome($i) != "codigo" && $obj->getTipo($i) != "key" && $obj->getTipo($i) != "user" && $obj->getTipo($i) != "password" && $obj->getTipo($i) != "validate")
			{
				if($i == ($obj->getQtdAtributos()-1))
				{
					if($obj->getTipo($i) != "dateTime"){
						$listaUpdates .= $obj->getNome($i)." = '".$obj->getValor($i)."'";
					}
				}else{
					if($obj->getTipo($i) != "dateTime"){
						$listaUpdates .= $obj->getNome($i)." = '".$obj->getValor($i)."', ";
					}
				}
			}	
		}
		
		return $listaUpdates;
	}	
}